home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / DOS.SWG / 0031_APPEND, ASSIGN & SHARE.pas < prev    next >
Pascal/Delphi Source File  |  1993-10-28  |  3KB  |  75 lines

  1. {===========================================================================
  2. Date: 09-22-93 (08:41)
  3. From: GREG VIGNEAULT
  4. Subj: APPEND, ASSIGN, & SHARE
  5. ---------------------------------------------------------------------------
  6. JS> How could I determine if DOS extension utilities (eg. Append,
  7.   > Assign, and Share) are installed, using Turbo Pascal? }
  8.  
  9. (* Turbo/Quick/StonyBrook Pascal: Determine if extensions installed *)
  10. PROGRAM DosExt;               { DOSEXT.PAS: Greg Vigneault 93.10.02  }
  11.  
  12. USES Dos;                     { Import Intr(), MsDos(), Registers    }
  13.  
  14. TYPE Extension = (Append, Assign, Share); { the PC/MS-DOS extensions }
  15.  
  16. VAR  Reg        : Registers;  { to access Intel 80x86 CPU registers  }
  17.      Status     : WORD;       { to return system extension status    }
  18.      Installed  : Extension;  { DOS extension (Append|Assign|Share)  }
  19.      Okay       : BOOLEAN;    { success or failure (TRUE|FALSE)      }
  20.      Func       : BYTE;       { the multiplex function number        }
  21.  
  22. (*------------------------------------------------------------------*)
  23. FUNCTION DosVersion : WORD;                 { to check DOS version   }
  24.   BEGIN
  25.     Reg.AH := $30;                          { function:get DOS ver   }
  26.     MsDos (Reg);                            { call DOS services      }
  27.     DosVersion := Reg.AL * 100 + Reg.AH;    { ...version times 100   }
  28.   END {DosVersion};
  29.  
  30. (*------------------------------------------------------------------*)
  31. FUNCTION Multiplex (Func : WORD; VAR Status : WORD) : BOOLEAN;
  32.   BEGIN
  33.       Reg.AH := Func;                       { function number        }
  34.       Reg.AL := 0;                          { subfunction:get status }
  35.       Intr ($2F,Reg);                       { do multiplex interrupt }
  36.       IF (Reg.Flags AND 1) <> 0 THEN BEGIN  { an error condition?    }
  37.         Status := Reg.AX;                   { the DOS error code     }
  38.         Multiplex := FALSE; END             { and flag the error     }
  39.       ELSE BEGIN
  40.         Status := WORD(Reg.AL);             { the function status    }
  41.         Multiplex := TRUE;                  { and flag success       }
  42.       END;
  43.   END {Multiplex};
  44.  
  45. (*------------------------------------------------------------------*)
  46. BEGIN {DosExt}
  47.  
  48.   WriteLn;
  49.   IF DosVersion < 330 THEN BEGIN
  50.     WriteLn ('PC/MS-DOS version is too low, sorry.');
  51.     Halt (1);
  52.   END;
  53.  
  54.   FOR Installed := Append TO Share DO BEGIN
  55.     CASE Installed OF
  56.       Append : BEGIN Write ('APPEND '); Func := $B7; END;
  57.       Assign : BEGIN Write ('ASSIGN '); Func := $02; END;
  58.       Share  : BEGIN Write ('SHARE  '); Func := $10; END;
  59.     END; {CASE}
  60.     IF NOT Multiplex (Func,Status) THEN
  61.       WriteLn ('status unknown (MS-DOS error #',Status,').')
  62.     ELSE
  63.       CASE Status OF
  64.         0,1 : BEGIN
  65.                 Write ('not installed: ');
  66.                 IF Status = 1 THEN Write ('and NOT ');
  67.                 WriteLn ('okay to install.');
  68.               END;
  69.         255 : WriteLn ('is installed.');
  70.      END; {CASE & IF}
  71.   END; {FOR}
  72.  
  73. END {DosExt}.
  74. (********************************************************************)
  75.